define([
    'Util',
    '../common/getMenu',
    'list',
    'dialog',
    'loading',
    'text!tpl/projectFlow/workflowProject.tpl',
    'text!tpl/projectFlow/reviseGooflow.tpl',
    'tab',
    'cookie',
    '../common/getProjectList',
    '../common/getPath',
    'form',
    '../common/dateFormat',
    'style!../../css/gooflow/gooflow.css',
    '../common/components/gooflow/gooflow'
], function(Util, getMenu, List, Dialog, Loading, tpl, reviseGooflow, Tab, $cookie, getProjectList, AjaxPath, Form) {
    require(['style!css/style.css']);

    var $el=null;
    var _indexModule = null,
        list = null,
        tab = null,
        tplId = null,
        handLoading = null,
        loadingConfig = null,
        projectUseMode = null,
        projectWorkflowBox = null,
        projectJsonData = null,        //记录当前页面选择的是51，9，还是4
        Authority = null;
   
    var initialize = function(indexModule, options, tabItem){
        $el = $(tpl);
        _indexModule = indexModule;

        tab = tabItem;
        createLoading();
        this.content=$el;
        tplId = options.menuId;

        // 业务相关代码
        eventInit();
        getAuthority();
        getMenu(tab, options.menuId);
    };

    var eventInit = function (){
        $el.on('click', '.flowSelBtn', selFlow);//选用，使用中
        $el.on('click', '.flowEditBtn', editFlow);//修改
        $el.on('click', '.work-tab li', bindListFlowTab);   //切换需求，用力，缺陷
        $('#tabList li.' + tplId).on('click', tabActive);
    }

    var tabActive = function() {
        search(list.pageIndex);
        getMenu(tab, tplId);   
    }

    //点击"选用"按钮
    var selFlow=function(e){
       
        var nodes = list.getSelected();             //getSelected();
        var obj = {};
        obj.systemId=$cookie.get("projectSelectId");
        obj.useMode = nodes.useMode;
        obj.id = nodes.id;
        obj.flowTitle = nodes.flowTitle;
        Util.ajax.postJson(AjaxPath.project+"/workFlowMains/"+ nodes.id, obj, function(result, isok) {
            flag = result.returnMessage;
            if(result.returnCode === '0000'){
               // handLoading.destroy();
                new Dialog({
                    mode: 'tips',
                    content: '<div style="text-align:center;margin-top:70px">'+flag+'</div>',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false
                });

                search(list.pageIndex);
                $(".workflowContainer").find("a").removeClass("theSort");
            } 
        });
    };
    
    //第一次自动获取“需求”“用例”“缺陷”"项目"切换list表；
    var getWorkflowTab=function(){
        Util.ajax.getJson(AjaxPath.project + "/dropdown?modual=dataWorkFlow&type=useMode", {}, function(result, isok) {
            if(result.returnCode==="0000"){
                var tabStr = "";                
                $(result.beans).each(function(index, item) {
                    tabStr += '<li data="'+ item.key +'"><a href="javascript:;">'+ item.value +'</a></li>'
                })
                $(".work-tab").html(tabStr);
                $(".work-tab li:first").addClass("actived");
                projectUseMode = $(".work-tab li.actived").attr("data");
                var data = {};
                data.useMode = projectUseMode;
                data.systemId = $cookie.get("projectSelectId");
                if(data.systemId===null||data.systemId===undefined){
                    data.systemId='';
                }
                listInit();
                // console.log(data);
                list.search(data);
                $(".workflowContainer").find("a").removeClass("theSort");
                
            }
        })
    };

    //点击切换“需求”“用例”“缺陷”切换list表
    var bindListFlowTab = function(e){
        var data={};
        $(this).addClass('actived').siblings().removeClass('actived');
        data.useMode = $(this).attr("data");
        data.systemId = $cookie.get("projectSelectId");
        if(data.systemId===null||data.systemId===undefined){
            data.systemId='';
        }
        list.search(data);
        $(".workflowContainer").find("a").removeClass("theSort");
        
    };

    //点击跳出修改页面
    var editFlow=function(e, item){
        var datas=null;
        if(item){
            datas=item.data;
        }
         datas = list.getSelected();
        tab.createTab({
            title: '修改工作流',
            closeable: 1, //是否可以关闭 0false不可以|1true可以
            className: 'editGooflowTab'
        });
        tab.switchTab('修改工作流');
        Util.ajax.getJson(AjaxPath.project+"/workFlows/"+datas.id, {}, function(result, isok) {
            var flowdata = datas;
                flowdata.memo = result.beans.description;
                flowdata.viewJsonData = result.beans.view_json;
                flowdata.dropActive = datas.useMode;
                flowdata.menuId = tplId;

            require(['js/gooflow/editGooflow'], function(flowEditContent) {
                var result = new flowEditContent({}, flowdata, tab);
                tab.content(result.content);
            });
        })
    }

    //点击工作流的名称链接，弹出查看工作流的浮层。    
    var reviseFlow = function(e, item){
        Util.ajax.getJson(AjaxPath.project+"/workFlows/"+item.data.id, {}, function(result, isok) {
            var config = null;
            if(result.returnCode==="0000"){
                projectJsonData = result.beans.view_json;
                item.data.memo = result.beans.description;
                item.data.useModeName = result.beans.useModeName;
                item.data.useStatusName = item.data.useStatus ===0 ? "备用" : "使用中";
                item.data.createTimeDate = new Date(item.data.createTime).Format('yyyy-MM-dd hh:mm:ss');
                item.data.updateTimeDate = new Date(item.data.updateTime).Format('yyyy-MM-dd hh:mm:ss');
                if(Authority){
                    config = {
                        mode: 'normal',
                        title: '工作流:'+item.data.flowTitle,
                        content: Util.hdb.compile(reviseGooflow)(item),
                        ok: function() { 
                            console.log('点击了修改按钮');
                            editFlow(e,item);
                            return true;
                        }, 
                        oniframeload:function () {
                            console.log('iframe内容加载完毕');
                            // 点击确定按钮的回调函数，可为空。如果指定 return false 则执行完方法后不关闭弹窗，默认 return true。若不配置该项，则不会出现确定按钮。
                        },
                        cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
                        okValue: '修改', //取消按钮的文本 默认是 ‘关闭’
                        cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
                        width: 920, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                        height: parseInt($(".sn-tab.J_tab_render").height()*0.8), //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                        maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                        maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                        padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                        align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                        skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                        fixed: false, //是否开启固定定位 默认false不开启|true开启
                        quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                        modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                        backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                        backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                        beforeOpen: function() {
                            console.log('对话框打开时执行。');
                            modalGooflow();

                        },
                        escClose:true,//esc键快速关闭对话框，默认为true
                        zIndex:990   // 对话框的z-index值，默认是1024。
                    }
                }else {
                    config = {
                        mode: 'normal',
                        title: '工作流:'+item.data.flowTitle,
                        content: Util.hdb.compile(reviseGooflow)(item),
                        cancel: function() { 
                            console.log('点击了取消按钮');
                            return true;
                        },  
                        oniframeload:function () {
                            console.log('iframe内容加载完毕');
                            // 点击确定按钮的回调函数，可为空。如果指定 return false 则执行完方法后不关闭弹窗，默认 return true。若不配置该项，则不会出现确定按钮。
                        },
                        cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
                        okValue: '修改', //取消按钮的文本 默认是 ‘关闭’
                        cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
                        width: 920, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                        height: parseInt($(".sn-tab.J_tab_render").height()*0.8), //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                        maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                        maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                        padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                        align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                        skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                        fixed: false, //是否开启固定定位 默认false不开启|true开启
                        quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                        modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                        backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                        backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                        beforeOpen: function() {
                            console.log('对话框打开时执行。');
                            modalGooflow();

                        },
                        escClose:true,//esc键快速关闭对话框，默认为true
                        zIndex:990   // 对话框的z-index值，默认是1024。
                    }
                }
                
                new Dialog(config);
            }else {
                config = {
                    mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                };
                new Dialog(config);
            }
        })
    };

    var createLoading = function() {
        loadingConfig = {
            el: 'body', //组件要绑定的容器，默认为body（此项可不配置或留空）
            className: 'loading', //组件外围的className
            position: 'center', //提示信息位置，顶部top|默认center中央
            width: '300', //loading的宽度,非必须，默认300
            height: 'auto', //loading的宽度,非必须，默认auto
            mask: 1, //是否显示遮罩， 0不显示|默认1显示
            animate: 1, //是否显示动画效果， 0不显示|默认1显示
            mode: 'layer', //展示方式 loadingLine线条方式|默认layer弹层方式
            text: '加载中...', //提示文字，默认 加载中...
            icon: 'dotCycle', //文字前面的gif动画， 默认dotCycle有点组成的圈|cmcc移动图标|cmccLarge大的移动图标
        }
    }
    //可拖动top顶栏；
    var inProjectList = function(){
        getProjectList($cookie.get("userId"), getWorkflowTab, search); //第一个参数为用户id
    }

    //功能是向后台的发送表单数据
    var search = function(pageIndex) {
        var data = Form.serialize($('.searchModuleForm', $el));
        data.limit = 10;
        data.page = 1;
        data.systemId = $cookie.get("projectSelectId");
        if(data.systemId===null||data.systemId===undefined){
            data.systemId='';
        }
        data.useMode = $(".work-tab li.actived").attr("data");
        list.search(data,pageIndex ? pageIndex : "");
        $(".workflowContainer").find("a").removeClass("theSort");
    }   

    var listInit = function(){
        var config = {
            el: $('.workflowContainer', $el),
            ajax: {    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                method:'GET'
            },
            field: {
                boxType: 'radio',  // 'checkbox'
                key: 'id',
                items: [
                {
                    text: '工作流名称',
                    title: 'flowTitle',
                    name: 'flowTitle',    // 'anoceTitleNm',
                    className: 'w120',
                    width:200,
                    sorting:1,
                    click: function (e, val,item) {
                        // console.log(e,item)
                        // creatDialog(e, item);
                        handLoading = new Loading(loadingConfig);
                        reviseFlow(e,item);
                        handLoading.destroy();
                    },
                    render: function (item, val) {
                        val = $("<span/>").text(val).html();
                        val = val = val.replace(/\s/g, '&nbsp;');
                        return '<a href="javascript:;" style="outline:none;">' + val + '</a>';
                    }
                },
                {
                    text: '创建时间',
                    name: 'createTime',        //'crtTime',
                    className: 'w110',
                    width:200,
                    sorting:1,
                    render: function (item, val) {
                        var dateValue = new Date(val).Format("yyyy-MM-dd hh:mm:ss")
                        return dateValue;
                    }
                },
                {
                    text: '更新时间',
                    name: 'updateTime',              //'endEffTime',
                    className: 'w110',
                    width:200,
                    sorting:1,
                    render: function (item, val) {
                        var dateValue = new Date(val).Format("yyyy-MM-dd hh:mm:ss")
                        return dateValue;
                    }
                },
                {
                    text: '操作',
                    name: '',
                    className: 'w100',
                    render: function (item, val) {
                        if(Authority){
                        var defaultButton = "";
                        var defaultEditButton = "";
                        if(item.useStatus=== 0){    
                            defaultButton ='<button class="t-btn t-btn-blue t-btn-xs flowSelBtn" style="margin-right:8px;"><a style="color:#fff">&nbsp;&nbsp;选用&nbsp;&nbsp;</a></button>'
                        }else{
                            defaultButton ='<button class="t-btn t-btn-xs flowSelBtn" style="margin-right:8px;">使用中</button>'
                        }
                        
                        
                            defaultEditButton = '<button class="t-btn t-btn-blue t-btn-xs flowEditBtn"><a style="color:#fff">修改</a></button>';
                       
                        return '<div class="fn-center" style="color:#fff">'+defaultButton + defaultEditButton +'</div>';
                    } else{
                        return '<div class="fn-center">您没有权限操作该项!</div>'
                    } }
                }]
            },
            page: {
                customPages: [2, 3, 5, 10, 15, 20, 30, 50], //可选择每页显示多少条
                perPage: 10, //默认每页显示多少条记录
                total: true
            },
            data: {
                url: AjaxPath.project + "/workFlowMains"
            }
        };
        list = new List(config);
        // list.search(data);
    }

    //弹层显示流程图
    var modalGooflow = function() {
        var property = {
            width: 903,
            height: 300,
            toolBtns: [],
            toolBtnNames: [],
            haveHead: false, //是否显示顶部
            // headBtns: ["new", "open", "save", "undo", "redo", "reload"], //如果haveHead=true，则定义HEAD区的按钮
            headBtns: ["undo", "redo",], //如果haveHead=true，则定义HEAD区的按钮
            haveTool: false, //是否显示左侧
            // haveGroup: true,
            useOperStack: true,
        };

        if(!projectJsonData){
            projectJsonData={
                "title":"",
                "nodes":{},
                "lines":{},
                "areas":{},
                "initNum":0
            };
        }else{
            projectJsonData = JSON.parse(projectJsonData);
        }

        workflowBox = $.createGooFlow($("#modalProjectFlowBox"), property);
        workflowBox.clearData();
        workflowBox.loadData(projectJsonData);
    }

    //验证权限
    var getAuthority = function() {
        Util.ajax.getJson(AjaxPath.auth + '/authority/button/'+ $cookie.get("userId") +'?datas=[{"mo":"17","btnId":""}]', {}, function(result, json){
            if(result.returnCode==="0000"){
                if(result.beans[0].mo===0){
                    Authority = false;
                }else {
                    Authority = true;
                }
                inProjectList();
            }
        })
    }
    
    return initialize;
});